home *** CD-ROM | disk | FTP | other *** search
/ PCGUIA 2010 Software/Programs / PCGuia_programas.iso / Software / Utils / VLC Media Player / vlc-1.0.3-win32.exe / sdk / include / vlc / plugins / vlc_stream.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-10-30  |  5.7 KB  |  190 lines

  1. /*****************************************************************************
  2.  * vlc_stream.h: Stream (between access and demux) descriptor and methods
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2004 the VideoLAN team
  5.  * $Id$
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23.  
  24. #ifndef VLC_STREAM_H
  25. #define VLC_STREAM_H 1
  26.  
  27. #include <vlc_block.h>
  28.  
  29. /**
  30.  * \file
  31.  * This file defines structures and functions for stream (between access and demux) descriptor in vlc
  32.  */
  33.  
  34. # ifdef __cplusplus
  35. extern "C" {
  36. # endif
  37.  
  38. /**
  39.  * \defgroup stream Stream
  40.  *
  41.  *  This will allow you to easily handle read/seek in demuxer modules.
  42.  * @{
  43.  */
  44.  
  45. /* Opaque definition for text reader context */
  46. typedef struct stream_text_t stream_text_t;
  47.  
  48. /**
  49.  * stream_t definition
  50.  */
  51.  
  52. struct stream_t
  53. {
  54.     VLC_COMMON_MEMBERS
  55.  
  56.     /* Module properties for stream filter */
  57.     module_t    *p_module;
  58.  
  59.     /* Real or virtual path (it can only be changed during stream_t opening) */
  60.     char        *psz_path;
  61.  
  62.     /* Stream source for stream filter */
  63.     stream_t *p_source;
  64.  
  65.     /* */
  66.     int      (*pf_read)   ( stream_t *, void *p_read, unsigned int i_read );
  67.     int      (*pf_peek)   ( stream_t *, const uint8_t **pp_peek, unsigned int i_peek );
  68.     int      (*pf_control)( stream_t *, int i_query, va_list );
  69.  
  70.     /* */
  71.     void     (*pf_destroy)( stream_t *);
  72.  
  73.     /* Private data for module */
  74.     stream_sys_t *p_sys;
  75.  
  76.     /* Text reader state */
  77.     stream_text_t *p_text;
  78. };
  79.  
  80. /**
  81.  * Possible commands to send to stream_Control() and stream_vaControl()
  82.  */
  83. enum stream_query_e
  84. {
  85.     /* capabilities */
  86.     STREAM_CAN_SEEK,            /**< arg1= bool *   res=cannot fail*/
  87.     STREAM_CAN_FASTSEEK,        /**< arg1= bool *   res=cannot fail*/
  88.  
  89.     /* */
  90.     STREAM_SET_POSITION,        /**< arg1= int64_t        res=can fail  */
  91.     STREAM_GET_POSITION,        /**< arg1= int64_t *      res=cannot fail*/
  92.  
  93.     STREAM_GET_SIZE,            /**< arg1= int64_t *      res=cannot fail (0 if no sense)*/
  94.  
  95.     /* Special for direct access control from demuxer.
  96.      * XXX: avoid using it by all means */
  97.     STREAM_CONTROL_ACCESS,  /* arg1= int i_access_query, args   res: can fail
  98.                              if access unreachable or access control answer */
  99.  
  100.     /* You should update size of source if any and then update size 
  101.      * FIXME find a way to avoid it */
  102.     STREAM_UPDATE_SIZE,
  103.  
  104.     /* */
  105.     STREAM_GET_CONTENT_TYPE,    /**< arg1= char **         res=can fail */
  106.  
  107.     /* XXX only data read through stream_Read/Block will be recorded */
  108.     STREAM_SET_RECORD_STATE,     /**< arg1=bool, arg2=const char *psz_ext (if arg1 is true)  res=can fail */
  109. };
  110.  
  111. VLC_EXPORT( int, stream_Read, ( stream_t *s, void *p_read, int i_read ) );
  112. VLC_EXPORT( int, stream_Peek, ( stream_t *s, const uint8_t **pp_peek, int i_peek ) );
  113. VLC_EXPORT( int, stream_vaControl, ( stream_t *s, int i_query, va_list args ) );
  114. VLC_EXPORT( void, stream_Delete, ( stream_t *s ) );
  115. VLC_EXPORT( int, stream_Control, ( stream_t *s, int i_query, ... ) );
  116. VLC_EXPORT( block_t *, stream_Block, ( stream_t *s, int i_size ) );
  117. VLC_EXPORT( char *, stream_ReadLine, ( stream_t * ) );
  118.  
  119. /**
  120.  * Get the current position in a stream
  121.  */
  122. static inline int64_t stream_Tell( stream_t *s )
  123. {
  124.     int64_t i_pos;
  125.     stream_Control( s, STREAM_GET_POSITION, &i_pos );
  126.     return i_pos;
  127. }
  128.  
  129. /**
  130.  * Get the size of the stream.
  131.  */
  132. static inline int64_t stream_Size( stream_t *s )
  133. {
  134.     int64_t i_pos;
  135.     stream_Control( s, STREAM_GET_SIZE, &i_pos );
  136.     return i_pos;
  137. }
  138.  
  139. static inline int stream_Seek( stream_t *s, int64_t i_pos )
  140. {
  141.     return stream_Control( s, STREAM_SET_POSITION, i_pos );
  142. }
  143.  
  144. /**
  145.  * Get the Content-Type of a stream, or NULL if unknown.
  146.  * Result must be free()'d.
  147.  */
  148. static inline char *stream_ContentType( stream_t *s )
  149. {
  150.     char *res;
  151.     if( stream_Control( s, STREAM_GET_CONTENT_TYPE, &res ) )
  152.         return NULL;
  153.     return res;
  154. }
  155.  
  156. /**
  157.  * Create a special stream and a demuxer, this allows chaining demuxers
  158.  * You must delete it using stream_Delete.
  159.  */
  160. #define stream_DemuxNew( a, b, c ) __stream_DemuxNew( VLC_OBJECT(a), b, c)
  161. VLC_EXPORT( stream_t *,__stream_DemuxNew, ( vlc_object_t *p_obj, const char *psz_demux, es_out_t *out ) );
  162. /**
  163.  * Send data to a stream_t handle created by stream_DemuxNew.
  164.  */
  165. VLC_EXPORT( void,      stream_DemuxSend,  ( stream_t *s, block_t *p_block ) );
  166.  
  167. /**
  168.  * Create a stream_t reading from memory.
  169.  * You must delete it using stream_Delete.
  170.  */
  171. #define stream_MemoryNew( a, b, c, d ) __stream_MemoryNew( VLC_OBJECT(a), b, c, d )
  172. VLC_EXPORT( stream_t *,__stream_MemoryNew, (vlc_object_t *p_obj, uint8_t *p_buffer, int64_t i_size, bool b_preserve_memory ) );
  173.  
  174. /**
  175.  * Create a stream_t reading from an URL.
  176.  * You must delete it using stream_Delete.
  177.  */
  178. #define stream_UrlNew( a, b ) __stream_UrlNew( VLC_OBJECT(a), b )
  179. VLC_EXPORT( stream_t *,__stream_UrlNew, (vlc_object_t *p_this, const char *psz_url ) );
  180.  
  181. /**
  182.  * @}
  183.  */
  184.  
  185. # ifdef __cplusplus
  186. }
  187. # endif
  188.  
  189. #endif
  190.